// 工具函数
var extend = function(target, source) {
  // 便利源对象的属性
  for (var property in source) {
    // 将源对象属性复制到目标对象中
    // 浅复制，不能复制引用类型
    target[property] = source[property];
  }
  // 返回目标对象
  return target;
}

// 节流器
var throttle = function() {
	// 获取第一个参数
	var isClear = arguments[0], fn;
	// 如果第一个参数是boolean类型，则表示是否清除计时器
	if (typeof isClear === 'boolean') {
		// 第二个参数则为函数
		fn = arguments[1];
		// 函数的计时器句柄存在，则清除计时器
		fn.__throttleID && clearTimeout(fn.__throttleID);
	// 通过计时器延迟函数的执行
	} else {
		// 第一个参数为函数
		fn = isClear;
		// 第二个参数为函数执行时的参数
		param = arguments[1];
		// 对执行的参数适配默认值，这里用以前学过的 extend 方法
		var p = extend({
			context: null,
			args: [],
			time: 300
		}, param);
		// 清除执行函数计时器句柄
		arguments.callee(true, fn);
		// 为函数绑定计时器
		fn.__throttleID = setTimeout(function() {
			// 执行函数
			fn.apply(p.context, p.args);
		}, p.time);
	}
}
